package model.comunication;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import model.Alumno;
import model.Contacto;
import model.Estado_Evento;
import model.Evento;
import model.PersonalAdministrativo;
import model.dba.EventoDAO;

public class IEvento {
	private EventoDAO eventoDAO;
	private static IEvento eventoInterface;

	private IEvento() {
		this.eventoDAO = EventoDAO.getInstance();
	}

	public static IEvento getInstance() {
		if (eventoInterface == null) {
			eventoInterface = new IEvento();
		}
		return eventoInterface;
	}

	/**
	 * Crea el objeto
	 * 
	 * @param estado
	 * @param fechaCreacion
	 * @param fechaEvento
	 * @param comentario
	 * @param persAdministrativo
	 * @param contactoInicial
	 *            NO OBLIGATORIO
	 * @return
	 */
	public Evento getEvento(Estado_Evento estado, Calendar fechaCreacion, Calendar fechaEvento, String comentario, PersonalAdministrativo persAdministrativo, Contacto contactoInicial, Contacto contactofinalizacion, String motivo) {
		return new Evento(estado, fechaCreacion, fechaEvento, comentario, persAdministrativo, contactoInicial, contactofinalizacion, motivo);
	}

	/**
	 * Crea el objeto
	 * 
	 * @param id
	 * @param estado
	 * @param fechaCreacion
	 * @param fechaEvento
	 * @param comentario
	 * @param persAdministrativo
	 * @param contacto
	 * @return
	 */
	public Evento getEvento(Integer id, Estado_Evento estado, Calendar fechaCreacion, Calendar fechaEvento, String comentario, PersonalAdministrativo persAdministrativo, Contacto contactoInicial, Contacto contactofinalizacion, String motivo) {
		return new Evento(id, estado, fechaCreacion, fechaEvento, comentario, persAdministrativo, contactoInicial, contactofinalizacion, motivo);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public Evento getEvento(Integer id) {
		return this.eventoDAO.get(id);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param personalAdministrativo
	 * @return
	 */
	public List<Evento> getEvento(PersonalAdministrativo personalAdministrativo) {
		return this.eventoDAO.get(personalAdministrativo);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @return
	 */
	public List<Evento> getAllEventos() {
		return this.eventoDAO.getAll();
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param ids
	 * @return
	 */
	public List<Evento> getSelectedEventos(Integer... ids) {
		List<Evento> eventoList = new ArrayList<Evento>();
		for (Integer id : ids) {
			eventoList.add(this.eventoDAO.get(id));
		}
		return eventoList;
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param estado_Evento
	 * @return
	 */
	public List<Evento> getSelectedEventos(Estado_Evento estado_Evento) {
		return this.eventoDAO.get(estado_Evento);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param estado_Evento
	 * @return
	 */
	public List<Evento> getEvento(PersonalAdministrativo personalAdministrativo, Alumno alumno, String fecha) {
		// return this.eventoDAO.get();
		return null;
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param estado_Evento
	 * @param personalAdministrativo
	 * @return
	 */
	public List<Evento> getSelectedEventos(Estado_Evento estado_Evento, PersonalAdministrativo personalAdministrativo) {
		return this.eventoDAO.get(estado_Evento, personalAdministrativo);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param evento
	 * @return
	 */
	public Integer addEvento(Evento evento) {
		return this.eventoDAO.add(evento);

	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param evento
	 * @return
	 */
	public boolean updateEvento(Evento evento) {
		return this.eventoDAO.update(evento);

	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param evento
	 * @return
	 */
	public boolean deleteEvento(Evento evento) {
		return this.eventoDAO.delete(evento);

	}

}
